package com.hqd.ch03.v38.web.multipart;

import com.hqd.ch03.utils.FileCopyUtils;
import com.hqd.ch03.v38.io.InputStreamSource;
import com.hqd.ch03.v38.io.Resource;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;

/**
 * 上传文件信息接口
 */
public interface MultipartFile extends InputStreamSource {
    /**
     * 获取文件名
     *
     * @return
     */

    String getName();

    /**
     * 获取原始文件名
     *
     * @return
     */
    String getOriginalFilename();

    /**
     * @return
     */
    String getContentType();

    /**
     * 是否为空
     *
     * @return
     */
    boolean isEmpty();

    /**
     * 获取文件大小
     *
     * @return
     */
    long getSize();

    /**
     * 获取字节数组
     *
     * @return
     * @throws IOException
     */
    byte[] getBytes() throws IOException;

    @Override
    InputStream getInputStream() throws IOException;

    default Resource getResource() {
        return new MultipartFileResource(this);
    }

    /**
     * 另存文件
     *
     * @param dest
     * @throws IOException
     * @throws IllegalStateException
     */
    void transferTo(File dest) throws IOException, IllegalStateException;

    default void transferTo(Path dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(getInputStream(), Files.newOutputStream(dest));
    }

}

